home *** CD-ROM | disk | FTP | other *** search
Modula Definition | 1990-12-01 | 21.0 KB | 508 lines |
- DEFINITION MODULE GEMEnv;
-
-
- (* Megamax Modula-2 GEM Library: Diverse Kontrollfunktionen
- *
- * Autor: Manuel Chakravarty Erstellt: März-Oktober 1987
- *
- * Version 2.2 V#0062
- *)
-
- (* Mit den Routinen dieses Moduls kann sich eine Anwendung beim GEM
- * An- und Abmelden, außerdem erfolgt hier die Anmeldung weiterer
- * VDI-Geräte.
- *)
-
-
- FROM GrafBase IMPORT Point, Rectangle;
-
- FROM GEMGlobals IMPORT TEffectSet;
-
-
- (* Kontroll Funktionen *)
- (* =================== *)
-
-
- TYPE GemHandle; (* Dient zur Identifizierung einer kompletten
- * Anmeldung (per 'InitGem') beim GEM.
- * (GEM-Referenz)
- *)
-
- DeviceHandle; (* Dient zur Identifizierung eines VDI-Gerätes.
- * Siehe auch 'OpenDevice'. (Geräte-Referenz)
- *)
-
-
- CONST NoDevice = DeviceHandle (NIL); (* Wert für ein nicht besetz-
- * tes Geräte-handle
- *)
-
- NDC = 0; (* Normalisierte Koordinaten *)
- RC = 2; (* Raster Koordinaten *)
-
-
- PROCEDURE InitGem ( sysKoor: CARDINAL;
- VAR handle : DeviceHandle;
- VAR success: BOOLEAN);
-
- (* Anmeldung einer Application beim GEM und Eröffnen einer
- * virtuellen Bildschirmarbeitsstation.
- *
- * 'sysKoor' -- Bestimmt das zu benutzenden Koordinatensystem,
- * dabei steht 'RC' für Rasterkoordinaten und NDC
- * für normalisierte Koordinaten.
- * 'handle' -- Liefert die Gerätereferenz der virtuellen Bild-
- * schirmarbeitsstation. Diese Referenz muß bei
- * jedem VDI-Aufruf als erster Parameter angege-
- * ben werden.
- * 'success' -- Meldet ob die Anmeldung erfolgreich verlaufen
- * ist. Ist dies nicht der Fall, so ist auch der
- * Wert von 'handle' ungültig.
- *
- * Ein Aufruf dieser Prozedur sollte am Anfang jeder Benutzung
- * der GEM Bibliothek stehen. Wird er nicht durchgeführt, so
- * kann es zum Absturz des Systems kommen.
- * Alternativ kann aber, wenn keine VDI-Funktionen benötigt
- * werden, 'InitApplication' (s.u.) aufgerufen werden.
- *
- * Falls die Prozedur 'GemActive' den Wert 'TRUE' liefert,
- * sind AES-Aufruf ohne jede Vorbereitung und VDI-Aufruf nach
- * dem Erzeugen einer (virtuellen) Arbeitstation mit 'OpenDevice'
- * ohne Benutzung von 'InitGem' möglich. Doch sollte
- * diese Vorgehensweise nur in Ausnahmefällen gewählt werden,
- * da dann z.B. keine autom. Abmeldung von Fenstern u.ä. bei
- * Prozessende durchgeführt wird.
- *
- * Die Variablen des Moduls 'PathEnv' werden zudem initialisiert:
- *
- * 'HomePath' wird in der Regel mit dem Pfad besetzt, von dem dies
- * Programm stammt. Dies erlaubt dann z.B. die Verwendung von '*'
- * (HomeSymbol) in Pfadlisten für 'Paths.SearchFile'. Siehe dazu
- * die Hinweise im PathEnv-Modul!
- *
- * 'SelectFile' erhält je nach GEM-Version die Funktion 'SelectFile'
- * bzw. 'SelectFileExtended' aus dem Modul 'AESMisc' zugewiesen.
- *
- * ACHTUNG: Alle bisherigen GEM Versionen unterstützen nur
- * Rasterkoordinaten um normalisierte Koordinaten
- * benutzen zu können, muß das GDOS geladen werden.
- *)
-
- PROCEDURE GemActive (): BOOLEAN;
-
- (* Erfragt, ob ein anderes Modul schon einen 'InitGem'- oder
- * 'InitApplication'-Aufruf getätigt hat, d.h. ob ein benutz-
- * barer 'GemHandle' vorhanden ist. (Siehe auch 'InitGem')
- *)
-
- PROCEDURE ExitGem (VAR handle: GemHandle);
-
- (* Dient zum Abmelden einer Application beim GEM.
- *
- * Es werden autom. alle noch offenen Fenster geschlossen, alle
- * angemeldeten Geräte beim VDI abgemeldet und eventuell noch
- * nicht rückgänig gemachte 'HideCursor', 'WindowUpdate' etc.
- * Aufrufe zurückgesetzt.
- * Sobald ein Modul terminiert wird für jedes auf dieser Modul-
- * ebene durchgeführten 'InitGem', welches noch nicht rückgängig
- * gemacht wurde, ein 'ExitGem' durchgeführt, dies gilt insbe-
- * sondere für Laufzeitfehler.
- *)
-
-
- PROCEDURE InitApplication (VAR success: BOOLEAN); (* "appl_init" *)
-
- (* Wie 'InitGem', jedoch werden weder eine virtuelle "Workstation"
- * mit 'OpenDevice' geöffnet, noch die PathEnv-Variablen initiali-
- * siert. Diese Funktion kann statt 'InitGem' aufgerufen werden,
- * wenn keine VDI-Funktionen benutzt werden. Dies ist beispielsweise
- * bei vielen Accessories der Fall. Die Abmeldung kann mit
- * 'ExitGem (gemHandle)', wobei 'gemHandle' die mit 'CurrGemHandle'
- * erfragte Referenz enthalten muß oder mit 'ExitApplication'
- * durchgeführt werden.
- *)
-
- PROCEDURE ExitApplication (); (* "appl_exit" *)
-
- (* Abmeldung der mit 'InitApplication' durchgeführten AES-Anmeldung.
- *)
-
-
- PROCEDURE GrafHandle (VAR charW, charH,
- cellW, cellH: CARDINAL;
- VAR hdl : CARDINAL);
-
- (* Ermittelt die VDI-Referenz, welche das AES bei seinem 'Open
- * Workstation' Aufruf erhalten hat. Zusätzlich werden noch die
- * Ausmaße eines Zeichens des Systemzeichensatzes zurückgegeben.
- *
- * 'charW', 'charH',
- * 'cellW', 'cellH' -- Ausmaße eines Zeichens des Systemzeichen-
- * satzes.
- * 'hdl' -- VDI-Referenz des AES. Hiermit kann man
- * mit 'OpenDevice' weitere virtuelle Bild-
- * schirmarbeitsstationen eröffnen.
- *
- * ACHTUNG: Die Werte von 'charW', 'charH', 'cellW', cellH'
- * werden vom GEM nicht korrekt geliefert. Daher
- * ist von ihrer Verwendung abzuraten.
- *)
-
-
- CONST NonVirtual = 0; (* Gerät soll mit Open Workstation geöffnet
- * werden.
- *)
-
- PROCEDURE OpenDevice (dev, sysKoor, mode: CARDINAL; VAR hdl: DeviceHandle);
-
- (* Dient zum Öffnen einer (virtuellen) Arbeitsstation.
- *
- * Eingabeparameter:
- * -----------------
- *
- * 'dev' -- Gibt das zu öffnende Gerät an. Entspricht der
- * in 'ASSIGN.SYS' angegebenen Gerätenummer.
- * 'sysKoor' -- Bestimmt das zu benutzenden Koordinatensystem,
- * dabei steht 'RC' für Rasterkoordinaten und NDC
- * für normalisierte Koordinaten.
- * 'mode' -- Wird hier 'NonVirtual' angegeben, so wird ein
- * eine neue Arbeitsstation eröffnet. Wird aber
- * das VDI-Handle einer Arbeitsstation (z.B. mit
- * 'GrafHandle' ermittelt) übergeben, so wird zu
- * dieser Arbeitsstation eine virtuelle Arbeits-
- * station geöffnet.
- *
- * Ausgabeparameter:
- * -----------------
- *
- * 'hdl' -- Die neue Gerätereferenz. Sie muß bei jedem VDI-
- * Aufruf, der an dieses Gerät gehen soll als erster
- * Parameter übergeben werden.
- *
- * ACHTUNG: Das Öffnen weitere nicht virtueller Arbeitsstationen
- * ist nur mit geledenem GDOS möglich.
- *)
-
- PROCEDURE CloseDevice (handle: DeviceHandle);
-
- (* Die (virtuelle) Arbeitsstation wird geschlossen.
- *
- * Bei einem Aufruf von 'ExitGem', werden alle Geräte, die unter
- * dem abgemeldeten 'GemHandle' geöffnet wurden autom. geschlossen.
- *)
-
-
- TYPE GDPAttribute = (lineOp, markerOp, textOp, fillOp, noAttribute,
- notAvaible);
- GDPFkt = (barGDP, arcGDP, pieGDP, circleGDP, ellipseGDP,
- eArcGDP, ePieGDP, rRectGDP, fRectGDP, jTextGDP);
- InputDev = (keybd, other);
- DeviceType = (outDev, inDev, inoutDev, reservedDev, metafile);
- ScreenType = (noScreen, difCtrlDifScrn, difCtrlSamScrn,
- samCtrlDifMem, samCtrlSamMem);
- TextRotType = (noTextRot, step90, everyDirec);
-
- PtrDevParm = POINTER TO DevParm;
- DevParm = RECORD
-
- (* Diese 4 Werte entsprechen den von
- * 'GrafHandle' gelieferten Werten.
- *)
- charWidth, charHeight,
- cellWidth, cellHeight,
-
- (* Breite und Höhe des Pixelrasters
- * [0..rasterWidth] und [0..rasterHeight]
- *)
- rasterWidth, rasterHeight,
-
- (* Breite und Höhe eines Pixels in mm/1000
- *)
- pointWidth, pointHeight,
-
- (* Anzahl der Schriftgrößen (0 bed. kontinuierlich)
- *)
- fontSizes,
-
- (* Anzahl der Linienarten und -stärken
- * (bei Letzterem bedeutet 0 kontinuierlich)
- *)
- lTypes, lWidths,
-
- (* Anzahl der Makierungsarten und -größen
- * (bei Letzterem bedeutet 0 kontinuierlich)
- *)
- mTypes, mSizes,
-
- (* Anzahl der verfügbaren Zeichensätze
- *)
- fonts,
-
- (* Anzahl der Füllmuster und Schraffuren
- *)
- fPatterns, fHatchings,
-
- (* Anzahl der gleichzeitig darstellbaren Farben
- *)
- noColors,
-
- (* Minimale und maximale Zeichenbreite und -höhe
- *)
- minWChar, maxWChar,
- minHChar, maxHChar,
-
- (* Minimale und maximale Zeilenbreite
- *)
- minWRow, maxWRow,
-
- (* Minimale und maximale Breite und Höhe
- * von Makierungen
- *)
- minWMark, maxWMark,
- minHMark, maxHMark,
-
- (* Anzahl der verfügbaren Hintergrundfarben
- *)
- bgColors,
-
- (* Anzahl der Farbebenen (planes)
- *)
- maxRasterPls,
-
- (* Anzahl der 16x16 Pixel Rasteroperationen pro sec.
- *)
- op16PerSec,
-
- (* Anzahl der Schreibmodi
- *)
- noWrtModes,
-
- (* Höchster Eingabemodus (0 ~ keine Eingabe,
- * 1 ~ Nachfragemodus, 2 ~ Testmodus)
- *)
- maxInMode,
-
- (* Maximale Anzahl von Punkten in einem
- * Punkte-Array und maximale Anzahl von
- * Zeichen in einem Zeichen-Array
- *)
- maxMarker, maxStrLen,
-
- (* Anzahl der Mausknöpfe
- *)
- noMButts,
-
- (* Anzahl der Zeichenmodi für verbreiterte Linien
- *)
- thickLnModes : CARDINAL;
-
- (* Gibt die verfügbaren grafischen
- * Grundfunktionen an
- *)
- possibleGDPs : ARRAY GDPFkt OF GDPAttribute;
-
- (* Folgende Flags bestimmen ob gewisse
- * Operationen mit dem beschriebenen
- * Gerät möglich sind und zwar:
- *)
- color, (* Farbe *)
- fill, (* Füllmuster *)
- cArray, (* Cell-Arrays *)
- zooming, (* Skalierung von Rastern *)
- lookUpTab, (* Color Look Up Table (CLUT) *)
- textJust, (* Textausrichtung *)
- contFill, (* contour fill *)
- penChange, (* Plotterstift austauschen *)
- colorRibbon, (* Farbband (Drucker) *)
- thickLnTyps (* verbreiterte Linientypen *)
- : BOOLEAN;
-
- (* Folgende Variable bestimmen das Eingabegerät
- * für diverse Arten der Eingabe und zwar für:
- *)
- grafCCtrl, (* grafische Eingaben *)
- valueIn, (* Werteingaben *)
- caseIn, (* Auswahleingaben *)
- alphanumIn (* alphanumerische Eingaben *)
- : InputDev;
-
- (* Typ des beschriebenen Gerätes
- *)
- deviceType : DeviceType;
-
- (* Art des Bildschirms
- *)
- screen : ScreenType;
-
- (* Unterstützte Texteffekte
- *)
- useTEffects : TEffectSet;
-
- (* Art der unterstützten Textrotation
- *)
- textRot : TextRotType;
-
- END;
-
- PROCEDURE DeviceParameter (handle: DeviceHandle): PtrDevParm;
-
- (* Liefert die Geräteparameter eines geöffneten Gerätes.
- *
- * 'handle' -- Gerätereferenz des Gerätes von dem die Parameter
- * ermittelt werden sollen.
- *)
-
-
- PROCEDURE CurrGemHandle (): GemHandle;
-
- (* Ermittelt die aktuelle GEM-Referenz ('GemHandle').
- *)
-
- PROCEDURE SetCurrGemHandle (handle: GemHandle; VAR success: BOOLEAN);
-
- (* Setzt die aktuelle GEM-Refrenz.
- *
- * 'handle' -- Neu zu setzende GEM-Referenz.
- * 'success' -- Wird hier 'FALSE' geliefert, so ist 'handle'
- * keine gültige GEM-Referenz und die aktuelle
- * Refrenz wurde nicht verändert.
- *)
-
-
- (* Fehlerbehandlung *)
- (* ================ *)
-
- VAR ErrorProc: PROC;
-
- PROCEDURE GemError (): BOOLEAN;
-
- (* Ermittelt, ob beim letzten Aufruf einer GEM-Routine ein
- * Fehler aufgetretten ist.
- *
- * Tritt ein Fehler auf, der nicht mittels dieser Prozedur
- * erfragt wird, so ruft die GEM-Bibliothek beim nächsten
- * Aufruf einer GEM-Routine die Prozedur 'ErrorProc' auf.
- * Ist letztere von der Applikation nicht verändert worden,
- * so wird die Modula-Standardprozedur 'HALT' aufgerufen.
- *)
-
- PROCEDURE ErrorNumber (): INTEGER;
-
- (* Ermittelt im Fehlerfall den Fehler auslösenden Wert.
- *
- * Ist 'GemError () = TRUE', so liefert diese Funktion
- * den INTEGER-Wert, der von der zuletzt benutzten ROM-
- * Routine geliefert wurde, um den Fehler anzuzeigen.
- *)
-
- VAR ErrHdlProc: PROC;
-
- (* Wird bei Auftreten eines Fehlers aufgerufen.
- * Die normalerweise hier installierte Routine tut nichts.
- * Wenn aber über die 'ErrorProc' der Fehler gemeldet wird,
- * kann hierüber herausgefunden werden, _wo_ der Fehler
- * auftrat.
- *)
-
-
- (* Nachfragefunktionen *)
- (* =================== *)
-
- PROCEDURE GEMAvailable (): BOOLEAN;
-
- (* Erfragt, ob das GEM schon initalisiert ist.
- *
- * Dies ist zum Beispiel bei Auto-Ordner-Programmen nicht der
- * Fall.
- * Solange diese Routine kein 'TRUE' liefert ist eine Anmeldung
- * mittels 'InitGem' sinnlos.
- *)
-
- PROCEDURE GDOSAvailable (): BOOLEAN;
-
- (* Liefert 'TRUE', sobald ein GDOS-Treiber vorhanden ist.
- * Berücksichtigt auch das GEM 2.1 (liefert dort immer TRUE).
- *)
-
- PROCEDURE GEMVersion (): CARDINAL;
-
- (* Liefert die Versionsnummer, die das GEM beim Anmelden einer
- * Applikation zurückgibt.
- *
- * Das zuerst von Atari ausgelieferte TOS und das Blitter-TOS
- * liefern den Wert $120, das TOS 1.4 den Wert $140.
- *
- * ACHTUNG: Damit diese Routine funktionieren kann muß die
- * Funktionsprozedur 'GemActive' den Wert 'TRUE'
- * liefern, also schon ein 'InitGem' durchgeführt
- * sein.
- *)
-
- PROCEDURE ApplicationID (): CARDINAL;
-
- (* Liefert die GEM-Identifikationsnummer der aktuellen
- * GEM-Refrenz.
- *)
-
- PROCEDURE MaxPoints (): CARDINAL;
-
- (* Liefert die maximale Anzahl der Punkte, die in einem Aufruf
- * von 'PolyLine', 'PolyMarker', etc. verarbeitet werden können.
- * Ein Wert von 0 bedeutet, daß die Anzahl nicht begrenzt ist.
- *)
-
-
- (* Jede der nachfolgenden Routinen erlaubtes einen Status abzufragen,
- * der für Module die ihrerseits andere GEM benutzende Module aufrufen
- * von Interesse sein kann. Ist z.B. 'NoUpdateWindow () # 0', so ist
- * es nicht möglich eine Menuzeile zu benutzen, man muß also erst die
- * entsprechende Anzahl von 'UpdateWindow (FALSE)' durchführen.
- *)
-
- PROCEDURE NoHideCursor (device: DeviceHandle): CARDINAL;
-
- (* Liefert die Anzahl der 'HideCursor'-Aufrufe, die noch nicht
- * mit 'ShowCursor' rückgänig gemacht wurden.
- *)
-
- PROCEDURE NoGrafMouseOff (): CARDINAL;
-
- (* Liefert die Anzahl der 'GrafMouse (mouseOff, NIL)'-Aufrufe,
- * die noch nicht mit 'GrafMouse (mouseOn, NIL)' rückgänig ge-
- * macht wurden.
- *)
-
- PROCEDURE NoUpdateWindow (): CARDINAL;
-
- (* Liefert die Anzahl der 'UpdateWindow (TRUE)'-Aufrufe, die noch
- * nicht mit 'UpdateWindow (FALSE)' rückgänig gemacht wurden.
- *)
-
- PROCEDURE NoMouseControl (): CARDINAL;
-
- (* Liefert die Anzahl der 'MouseControl (TRUE)-Aufrufe, die noch
- * nicht mit 'MouseControl (FALSE)' rückgänig gemacht wurden.
- *)
-
- PROCEDURE MouseInput (start: BOOLEAN);
-
- (* Sorgt dafür, daß der Mauszeiger, unabhänig von seinem aktuellen
- * Zustand, sichtbar wird. Dies ist zum Beispiel vor dem Benutzen
- * einer Dialogbox sinnvoll.
- *
- * TRUE -- Der Mauszeiger wird sichtbar
- * FALSE -- Der Mauszeiger erhält seinen alten Status wieder
- *
- * HINWEIS: Diese Routine sollte normallerweise nicht benutzt
- * werden. Sie ist systeminternen Funktionen vorbehalten.
- *)
-
-
-
- PROCEDURE SysInitGem ( sysKoor: CARDINAL;
- VAR handle : DeviceHandle;
- VAR success: BOOLEAN);
-
- PROCEDURE SysInitApplication (VAR success: BOOLEAN);
-
- END GEMEnv.